package com.ejuornal.util;

import java.io.File;
import java.util.Date;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
/**    
 * 项目名称：libraryshare    
 * 类名称：EmailSender    
 * 类描述：邮件发送    
 * 创建人：陈晨    
 * 创建时间：Dec 3, 2012 7:37:25 AM    
 * 修改人：陈晨    
 * 修改时间：Dec 3, 2012 7:37:25 AM    
 * 修改备注：    
 * @version     
 *
 */
public class EmailSender {
    private static final String charset = "utf-8";

    private static final String defaultMimetype = "text/plain";

    public static void main(String[] args) throws Exception {
        EmailSender.send(new String[] { "c691189598@163.com" }, "邮件测试xx", "<b>....</b>", null, "text/html");
    }

    /**
     * 发送邮件
     * 
     * @param receiver
     *            收件人
     * @param subject
     *            标题
     * @param mailContent
     *            邮件内容
     * @param mimetype
     *            内容类型 默认为text/plain,如果要发送HTML内容,应设置为text/html
     */
    public static void send(String receiver, String subject, String mailContent, String mimetype) {
        send(new String[] { receiver }, subject, mailContent, mimetype);
    }

    /**
     * 发送邮件
     * 
     * @param receivers
     *            收件人
     * @param subject
     *            标题
     * @param mailContent
     *            邮件内容
     * @param mimetype
     *            内容类型 默认为text/plain,如果要发送HTML内容,应设置为text/html
     */
    public static void send(String[] receivers, String subject, String mailContent, String mimetype) {
        send(receivers, subject, mailContent, null, mimetype);
    }

    /**
     * 发送邮件
     * 
     * @param receivers
     *            收件人
     * @param subject
     *            标题
     * @param mailContent
     *            邮件内容
     * @param attachements
     *            附件
     * @param mimetype
     *            内容类型 默认为text/plain,如果要发送HTML内容,应设置为text/html
     */
    public static void send(String[] receivers, String subject, String mailContent, File[] attachements, String mimetype) {
        Properties props = new Properties();
        props.put("mail.smtp.host", "smtp.ym.163.com");// Smtp服务器地址
        props.put("mail.smtp.auth", "true");// 需要校验
        Session session = Session.getDefaultInstance(props, new Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("admin@ejournal.cn", "Li568703695");// 登录用户名/密码
            }
        });
        session.setDebug(true);
        try {
            MimeMessage mimeMessage = new MimeMessage(session);
            mimeMessage.setFrom(new InternetAddress("admin@ejournal.cn"));// 发件人邮件

            InternetAddress[] toAddress = new InternetAddress[receivers.length];
            for (int i = 0; i < receivers.length; i++) {
                toAddress[i] = new InternetAddress(receivers[i]);
            }
            mimeMessage.setRecipients(Message.RecipientType.TO, toAddress);// 收件人邮件
            mimeMessage.setSubject(subject, charset);

            Multipart multipart = new MimeMultipart();
            // 正文
            MimeBodyPart body = new MimeBodyPart();
            // body.setText(message, charset);不支持html
            body.setContent(mailContent, (mimetype != null && !"".equals(mimetype) ? mimetype : defaultMimetype)
                    + ";charset=" + charset);
            multipart.addBodyPart(body);// 发件内容
            // 附件
            if (attachements != null) {
                for (File attachement : attachements) {
                    MimeBodyPart attache = new MimeBodyPart();
                    // ByteArrayDataSource bads = new
                    // ByteArrayDataSource(byte[],"application/x-any");
                    attache.setDataHandler(new DataHandler(new FileDataSource(attachement)));
                    String fileName = getLastName(attachement.getName());
                    attache.setFileName(MimeUtility.encodeText(fileName, charset, null));
                    multipart.addBodyPart(attache);
                }
            }
            mimeMessage.setContent(multipart);
            // SimpleDateFormat formcat = new SimpleDateFormat("yyyy-MM-dd");
            mimeMessage.setSentDate(new Date());// formcat.parse("2010-5-23")
            Transport.send(mimeMessage);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static String getLastName(String fileName) {
        int pos = fileName.lastIndexOf("\\");
        if (pos > -1) {
            fileName = fileName.substring(pos + 1);
        }
        pos = fileName.lastIndexOf("/");
        if (pos > -1) {
            fileName = fileName.substring(pos + 1);
        }
        return fileName;
    }
    /**
     * Title:emailConvert
     * Description:将邮箱地址转换为网站地址
     * @param email
     * @return
     * String
     */
    public static String emailConvert(String email) {
        StringBuffer sb = new StringBuffer(email);
        email = sb.substring(sb.indexOf("@"));
        if(email != null && !email.equals("")) {
            if(email.indexOf("mail.qq") > 0) {
                return "http://mail.qq.com";
            } else if(email.indexOf("mail.163") > 0) {
                return "http://mail.163.com";
            } else if(email.indexOf("mail.126") > 0) {
                return "http://mail.126.com";
            } else if(email.indexOf("mail.yahoo") > 0) {
                return "http://yahoo.com";
            } else if(email.indexOf("gmail") > 0) {
                return "http://gmail.com";
            }  else if(email.indexOf("mail.sohu") > 0) {
                
            } else if(email.indexOf("hotmail.com") > 0) {
                return "login.live.com";
            } else {
                return "http://www.google.com//search?q=" + email;
            }
        } 
        return null;
    }
}
